package com.ktjy.test;

import com.ktjy.mapper.Person;

import java.lang.reflect.Modifier;

public class GetClassInfo {
    public static void main(String[] args) {
        Class clz= Person.class; //获取Class实例
        String funllName=clz.getName(); //得到类的完全限定名(包名+类名)
        String simpleName=clz.getSimpleName(); //得到类的类名
        System.out.println("以下是"+funllName+"类的基本信息");
        System.out.println("-------------------------");


        //获取Person类所在的包
        Package pack=clz.getPackage(); //得到包类
        System.out.println(simpleName+"定义在"+pack.getName()+"包中");
        System.out.println("-------------------------");

        //获取clz 所表示的实体(类 接口 基本类型或者 viod)的超类的Class
        //如果 clz 表示Object 类 一个接口 一个基本类型 或者 是void，则返回null
        //如果 clz 表示一个数组 则返回表示该Object 类的Class 实例
        Class supperClass=clz.getSuperclass(); //分类
        System.out.println(simpleName+"类的父类是"+supperClass.getName());
        System.out.println("-------------------------");

        //获取clz所表示的类或者接口实现的接口
        //如果clz 表示一个不实现任何接口的类或者接口 则此返回一个长度为0的数组
        //如果此对象表示一个基本类型或者void 则此方法返回一个长度为0的数组
        Class[] interfaces=clz.getInterfaces(); //实现的接口
        System.out.println(simpleName+"类实现的接口有:");
        for (Class c:interfaces){
            System.out.println("\t"+c.getName());
        }
        System.out.println("-------------------------");


        //每个修饰符对应一个int常量 返回的修饰符信息将类所拥有的修饰符以"或" 运算组合
        //通过与Modifier 类中的常量进行"与" 运算即可判断修饰符的属性是否拥有某个修饰符
        int modedifer=clz.getModifiers(); //获取Person类的实例的访问修饰符
        System.out.println(simpleName+"类的访问修饰符是:");
        if ((modedifer & Modifier.PUBLIC)==Modifier.PUBLIC){
            System.out.println("\t 访问修饰符是 :public");
        }else {
            System.out.println("\t 访问修饰符是 :defalt(package)");
        }
        if ((modedifer &Modifier.FINAL)==Modifier.FINAL){
            System.out.println("\t 访问修饰符是 :final");
        }
        if ((modedifer &Modifier.ABSTRACT)==Modifier.ABSTRACT){
            System.out.println("\t 这是一个抽象类");
        }
        if ((modedifer &Modifier.INTERFACE)==Modifier.INTERFACE){
            System.out.println("\t 这是一个接口");
        }
        System.out.println("-------------------------");
    }
}
